import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# 生成样本数据
np.random.seed(42)
X, y = make_blobs(
    n_samples=300,          # 样本数量
    centers=4,              # 聚类中心数
    cluster_std=1.0,        # 簇的标准差
    random_state=170
)

# 可视化原始数据
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.scatter(X[:, 0], X[:, 1], s=50)
plt.title("Original Data")

# 使用K-Means聚类
kmeans = KMeans(
    n_clusters=4,           # 设置聚类数量
    init='k-means++',       # 使用优化的初始化方法
    max_iter=300,           # 最大迭代次数
    n_init=10,              # 不同初始化的次数
    random_state=42
)
kmeans.fit(X)

# 获取聚类结果
centroids = kmeans.cluster_centers_
labels = kmeans.labels_

# 可视化聚类结果
plt.subplot(1, 2, 2)
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=200, alpha=0.8, marker='X')
plt.title("K-Means Clustering Results")
plt.show()

# 输出评估指标
print(f"聚类中心坐标:\n{centroids}")
print(f"SSE（误差平方和）: {kmeans.inertia_:.2f}")
print(f"迭代次数: {kmeans.n_iter_}")